home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / diskutil / bigdos03.lzh / BIGDOS / XHDITEST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-17  |  4.8 KB  |  135 lines

  1. /* TABSIZE 4
  2.  * @(#)XHDItest.c
  3.  * 1995-05-27 von Rainer Seitel, Rastatt, DE.
  4.  * 1995-07-28 Zweisprachig: deutsch wenn _AKP = $??????01??, sonst englisch.
  5.  * 1995-10-17 Alte DOS-Limits werden beim Programmende restauriert.
  6.  * Public domain
  7.  */
  8.  
  9.  
  10. #include <stdio.h>
  11. #include "xhdi.h"  /* static bei getcookie() auskommentieren */
  12.  
  13.  
  14. #define E_OK 0
  15. #define EDRVNR -2
  16. #define EINVFN -32
  17. #define FIRST_CLUSTER 2
  18. #define NUM_DRIVES 32
  19.  
  20.  
  21. int main( int argc, unsigned char *argv[] )
  22. {
  23.     long german, r;
  24.     LONG old_secsiz, old_minfat, old_maxfat, old_minspc, old_maxspc, old_clusts,
  25.          old_maxsec, old_drives;
  26.     UWORD dos_version, xhdi, major, minor;
  27.     ULONG start_sector = 0, blocks = 0;
  28.     const BPB bpb;
  29.     unsigned char partid[4] = {0, 0, 0, 0};
  30.  
  31.     /* Landessprache bestimmen */
  32.     if (getcookie(0x5F414B50L, &german))  /* _AKP */
  33.         german = (german & 0xFF00) == 0x100;
  34.     else
  35.         german = 0;
  36.  
  37.     dos_version = Sversion();
  38.         printf("\rXHDI-Test 1995-10-17 Rainer Seitel\n\n"\
  39.                "GEMDOS Version %x.%02x\n\n", dos_version & 0xFF, dos_version >> 8);
  40.  
  41.     xhdi = XHGetVersion();
  42.     if (german)
  43.         printf("Plattentreiber hat XHDI %x.%02x", xhdi >> 8, xhdi & 0xFF);
  44.     else
  45.         printf("Hard disc driver has XHDI %x.%02x", xhdi >> 8, xhdi & 0xFF);
  46.  
  47.     if (xhdi) {
  48.         old_secsiz = XHDOSLimits(XH_DL_SECSIZ, 0);
  49.         old_minfat = XHDOSLimits(XH_DL_MINFAT, 0);
  50.         old_maxfat = XHDOSLimits(XH_DL_MAXFAT, 0);
  51.         old_minspc = XHDOSLimits(XH_DL_MINSPC, 0);
  52.         old_maxspc = XHDOSLimits(XH_DL_MAXSPC, 0);
  53.         old_clusts = XHDOSLimits(XH_DL_CLUSTS, 0);
  54.         old_maxsec = XHDOSLimits(XH_DL_MAXSEC, 0);
  55.         old_drives = XHDOSLimits(XH_DL_DRIVES, 0);
  56.  
  57.         printf(", XHDOSLimits :-");
  58.         if (XHDOSLimits(XH_DL_MAXSEC, 0xFFFFFFL) == EINVFN)
  59.             printf("(");
  60.         else if (XHDOSLimits(XH_DL_MAXSEC, old_maxsec) != 0xFFFFFFL)
  61.             printf("/");
  62.         else
  63.             printf(")");
  64.  
  65.         printf("\nXHDI-DOS-Limits XH_DL_SECSIZ: %ld\n", old_secsiz);
  66.         printf("XHDI-DOS-Limits XH_DL_MINFAT: %ld\n", old_minfat);
  67.         printf("XHDI-DOS-Limits XH_DL_MAXFAT: %ld\n", old_maxfat);
  68.         printf("XHDI-DOS-Limits XH_DL_MINSPC: %ld\n", old_minspc);
  69.         printf("XHDI-DOS-Limits XH_DL_MAXSPC: %ld\n", old_maxspc);
  70.         printf("XHDI-DOS-Limits XH_DL_CLUSTS: %ld\n", old_clusts);
  71.         printf("XHDI-DOS-Limits XH_DL_MAXSEC: %ld\n", old_maxsec);
  72.         printf("XHDI-DOS-Limits XH_DL_DRIVES: %ld\n", old_drives);
  73.     
  74.         /* Bei Plattentreiber mit XHDI 1.20 DOS-Limits einstellen. */
  75.         if (xhdi >= 0x120) {
  76.             if (german)
  77.                 printf("XHDI ≥ 1.20, versuche Big-DOS-Werte einzustellen:\n");
  78.             else
  79.                 printf("XHDI ≥ 1.20, try to set Big-DOS limits:\n");
  80.             XHDOSLimits(XH_DL_SECSIZ, 32768L);
  81.             XHDOSLimits(XH_DL_MINFAT, 1);
  82.             XHDOSLimits(XH_DL_MAXFAT, 2);
  83.             XHDOSLimits(XH_DL_MINSPC, 1);
  84.             XHDOSLimits(XH_DL_MAXSPC, 64);
  85.             XHDOSLimits(XH_DL_CLUSTS, 0xFFF0L-FIRST_CLUSTER);
  86.             XHDOSLimits(XH_DL_MAXSEC, 0xFFFFFFL);
  87.             XHDOSLimits(XH_DL_DRIVES, NUM_DRIVES);
  88.             printf("XHDI-DOS-Limits XH_DL_SECSIZ: %ld\n", XHDOSLimits(XH_DL_SECSIZ, old_secsiz));
  89.             printf("XHDI-DOS-Limits XH_DL_MINFAT: %ld\n", XHDOSLimits(XH_DL_MINFAT, old_minfat));
  90.             printf("XHDI-DOS-Limits XH_DL_MAXFAT: %ld\n", XHDOSLimits(XH_DL_MAXFAT, old_maxfat));
  91.             printf("XHDI-DOS-Limits XH_DL_MINSPC: %ld\n", XHDOSLimits(XH_DL_MINSPC, old_minspc));
  92.             printf("XHDI-DOS-Limits XH_DL_MAXSPC: %ld\n", XHDOSLimits(XH_DL_MAXSPC, old_maxspc));
  93.             printf("XHDI-DOS-Limits XH_DL_CLUSTS: %ld\n", XHDOSLimits(XH_DL_CLUSTS, old_clusts));
  94.             printf("XHDI-DOS-Limits XH_DL_MAXSEC: %ld\n", XHDOSLimits(XH_DL_MAXSEC, old_maxsec));
  95.             printf("XHDI-DOS-Limits XH_DL_DRIVES: %ld\n", XHDOSLimits(XH_DL_DRIVES, old_drives));
  96.         }
  97.  
  98.         if (argc < 2)
  99.             if (german)
  100.                 printf("\nKein GEMDOS-Laufwerksbuchstabe übergeben!\n");
  101.             else
  102.                 printf("\nNo GEMDOS drive letter specified!\n");
  103.         else {
  104.             r = XHInqDev2((*argv[1] & 0x5F) - 'A', &major, &minor, &start_sector,
  105.                           &bpb, &blocks, partid);
  106.             if (r == E_OK || r == EDRVNR) {
  107.                 if (partid[0] == 0 && partid[1] == 'D') {  /* MS-DOS-Partition */
  108.                     partid[0] = ' ';
  109.                     partid[2] += '0';
  110.                 }
  111.                 if (german)
  112.                     printf("\nLaufwerk %c: major %d, minor %d, Start %ld, Größe %ld, ID %s,\n",
  113.                            *argv[1] & 0x5F, major, minor, start_sector, blocks, partid);
  114.                 else
  115.                     printf("\nDrive %c: major %d, minor %d, start %ld, size %ld, ID %s,\n",
  116.                            *argv[1] & 0x5F, major, minor, start_sector, blocks, partid);
  117.                 if (r == E_OK) {
  118.                     printf("BPB recsiz %u, ", bpb.recsiz);
  119.                     printf("BPB clsiz %d, ", bpb.clsiz);
  120.                     printf("BPB clsizb %u, ", bpb.clsizb);
  121.                     printf("BPB rdlen %d, ", bpb.rdlen);
  122.                     printf("BPB fsiz %d,\n", bpb.fsiz);
  123.                     printf("BPB fatrec %d, ", bpb.fatrec);
  124.                     printf("BPB datrec %d, ", bpb.datrec);
  125.                     printf("BPB numcl %u, ", bpb.numcl);
  126.                     printf("BPB bflags %d\n", bpb.bflags);
  127.                 }
  128.             }
  129.         }
  130.     }  /* if (xhdi) */
  131.  
  132.     Bconin(2);  /* braucht 700 Byte weniger als getchar() */
  133.     return 0;
  134. }
  135.